/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-登录通-缺省实现
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.dlt.webapi.controller;

import com.taiping.dlt.pojo.dto.AuthLoginDTO;
import com.taiping.dlt.pojo.query.AuthLoginQO;
import com.taipingframework.boot.dlt.webapi.handler.AccountHandler;
import com.taipingframework.boot.web.response.result.ApiResult;
import com.taipingframework.utility.exception.ApplicationException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@Slf4j
@RestController
@RequestMapping("/api/dlt/account")
@RequiredArgsConstructor
public class AccountController {

    private final AccountHandler accountHandler;

    /**
     * 禁用账户/(逻辑)删除账户
     */
    @PostMapping(value = "/disable")
    public Mono<ApiResult<Boolean>> disableAccount(@RequestBody AuthLoginQO loginQO) {
        return accountHandler.disableAccount(loginQO)
                .onErrorResume(e -> Mono.error(new ApplicationException(e)));
    }

    /**
     * 企业统一认证中心的用户如果被授权访问当前业务系统，则需要通过此接口同步到ES中。
     * 顺便提一下，对于`权限管理模块`的功能开发：
     * (1) 如果不通用，则可集成到当前业务系统；
     * (2) 如果通用，则需要集成到企业统一认证中心；
     * (3) 如果采用了多租户模式，则`权限管理模块`应该作为一个单独的项目进行开发且独立部署。
     */
    @PostMapping("/push")
    public Mono<ApiResult<Boolean>> push(@RequestBody AuthLoginDTO authLoginDTO) {
        return accountHandler.collect(authLoginDTO)
                .onErrorResume(e -> Mono.error(new ApplicationException(e)));
    }

}
